#include<bits/stdc++.h>

using namespace std;
const int N=50005,M=1005;
int q[M][M],m,t=1,f=0,maxn;
int dx[]={1,0,-1,0},dy[]={0,-1,0,1};
int vis[M][M],vis1[M][M];
typedef pair<int,int>Pll;
map<Pll,int >lqq;
queue<Pll>s;
void work(int x,int y){
		for(int i=0;i<4;i++){
				int nx=x+dx[i];
				int ny=y+dy[i];
				if(nx>=0&&ny>=0&&!vis1[nx][ny]){
					vis1[nx][ny]=t;
		}
     }
}
bool check(){
	for(int i=0;i<=1000;i++){
		for(int j=0;j<=1000;j++){
			if(vis[i][j]==t){
			    cout<<i<<" "<<j<<" "<<t<<endl;
			}
		}
	}
	return false;
}
void bfs(){
	int t=1,m,f1=0;
	s.push({0,0});
	while(t<=maxn){
		for(auto j:lqq){
			if(j.second==t){
				work(j.first.first,j.first.second);
			}
		}
	   while(s.size()){
	    auto j=s.front();
	    int f=0;
	   for(int i=0;i<4;i++){
	   				int nx=j.first+dx[i];
	   				int ny=j.second+dy[i];
	   				if(nx>=0&&ny>=0&&!vis[nx][ny]){
	   					q[nx][ny]=q[j.first][j.second]+1;
	   					if(q[nx][ny]>t){
						   	f=1;
						   	break;
						   }
	   					s.push({nx,ny});
						   vis[nx][ny]=t;
	   		   }
	        }
	        if(!f)
	        s.pop();
	        else break;
	   }
	   check();
	   t++;
	}
	if(!f1)cout<<"123";
	else cout<<m<<endl;
}

int main(){
	cin>>m;
	while(m--){
		int x,y,t;
		cin>>x>>y>>t;
		lqq[{x,y}]=t;
		maxn=max(t,maxn);
	}
	bfs();
	return 0;
}
